package com.shop.loan.task;

import com.shop.loan.service.*;
import com.shop.loan.util.BackupUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Slf4j
@Component
public class SysTask {

    @Resource
    BackupUtil backupUtil;

    @Resource
    LoanOrderService loanOrderService;

    @Resource
    WithHoldService withHoldService;

    @Resource
    BlackListService blackListService;

    @Resource
    LoanSignService loanSignService;

    @Resource
    LiHuoService liHuoService;

    @Resource
    YingCaiService yingCaiService;

    /**
     * 5分钟执行一次
     */
    @Scheduled(cron = "0 0/5 * * * ?")
    public void autoLoan() {
        log.info("定时【autoLoan + taskByNotify】 自动放款 + AR推送");
        loanOrderService.authLoan();
        liHuoService.taskByNotify();
        yingCaiService.getOrderInfo();
    }

    /**
     * 5秒执行一次
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void autoSign() {
        log.info("定时【autoSign】 自动生成电子签");
        loanSignService.createSignContract();
    }

    /**
     * 每分钟执行一次
     */
    @Scheduled(cron = "0 0/1 * * * ?")
    public void withholdTask() {
        log.info("定时【withhold】 代扣");
        withHoldService.withholdByToday();
        withHoldService.withholdByOverdue();
    }


    /**
     * 每隔1小时
     */
    @Scheduled(cron = "0 0 0/1 * * ?")
    public void orderMsgNotify() {
        log.info("定时【orderMsgNotify】到期短信");
        loanOrderService.orderMsgNotify();
        log.info("定时【orderStatisticDay】 插入今日日志");
        loanOrderService.orderStatisticDay();
    }


    /**
     * 查询订单是否逾期（每天凌晨1点）
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public void checkOverdueTask() {
        log.info("定时【checkOverdueTask】 检查订单是否逾期");
        loanOrderService.overdueTask();
        loanOrderService.allotAfterService();
    }


    @Scheduled(cron = "0 10 1 * * ?")
    public void updateOverdueDay() {
        log.info("定时【updateOverdueDay】 更新订单逾期天数");
        loanOrderService.updateOverdueDay();
    }

//    /**
//     * 插入今日统计日志
//     */
//    @Scheduled(cron = "0 0 2 * * ?")
//    public void orderStatisticDay() {
//        log.info("定时【orderStatisticDay】 插入今日日志");
//        loanOrderService.orderStatisticDay();
//    }

    /**
     * 数据库备份  12小时备份一次
     */
    @Scheduled(cron = "0 0 0/12 * * ?")
    public void backUpDb() {
        backupUtil.backupRun();
        backupUtil.uploadDbFile();
    }


    /**
     * 结清订单隐藏
     */
    @Scheduled(cron = "0 30 1 * * ?")
    public void orderHide() {
        log.info("定时【orderHide】 结清订单隐藏");
        loanOrderService.orderHide();
    }

    /**
     * 上传订单信息到数据中心（每天凌晨2点30分）
     */
    @Scheduled(cron = "0 30 2 * * ?")
    public void orderPut() {
        log.info("定时【orderPut】 上传订单信息到数据中心");
        loanOrderService.orderPut();
    }

    /**
     * 逾期订单上传紧急联系人（每天凌晨3点30分）
     */
    @Scheduled(cron = "0 30 3 * * ?")
    public void orderOverduePutContact() {
        log.info("定时【orderOverduePutContact】 逾期订单上传紧急联系人");
        loanOrderService.orderOverduePutContact();
    }


    /**
     * 拒绝用户上传紧急联系人（每天凌晨3点50分）
     */
    @Scheduled(cron = "0 50 3 * * ?")
    public void rejectUserPutContact() {
        log.info("定时【rejectUserPutContact】 拒绝用户上传紧急联系人");
        loanOrderService.rejectUserPutContact();
    }

    /**
     * 拒绝用户上传
     */
    @Scheduled(cron = "0 50 3 * * ?")
    public void rejectUserPut() {
        log.info("定时【rejectUserPut】 上传拒绝用户到数据中心");
        loanOrderService.rejectUserPut();
    }

    /**
     * 上传黑名单到数据中心（每天凌晨4.30分）
     */
    @Scheduled(cron = "0 30 4 * * ?")
    public void blackPut() {
        log.info("定时【blackPut】 上传黑名单到数据中心");
        blackListService.blackPut();
    }


}
